import Vue from 'vue'
// 引入路由
import VueRouter from 'vue-router'
import routes from './routers.js'
// 引入仓库
import store from '@/store'
import { indexOf } from 'lodash'
// 使用路由
Vue.use(VueRouter)
// 重写路由让报错消失
const originalPush = VueRouter.prototype.push

VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

let router = new VueRouter({
    routes,
    store,
    // 滚动行为
    scrollBehavior(to,from,savedPosition) {
        // 滚动到那里
        return {y:0}
    }
})
// 全局前置路由守卫  到导航发生变化时触发
router.beforeEach(async(to,from,next)=>{
  // console.log(store);
  next()
  // 用户登陆了才会有token
  let token = store.state.user.token
  // 
  let name = store.state.user.userInfo.name
  // 如果用户登陆了 就不能跳转/login 和 /register
  if(token) {
    if(to.path == '/login' || to.path == '/register') {
      next('/home')
    } else {
      // 如果用户名已有
      if(name) {
        next()
      } else {
        // 没有用户信息 派发actions 获取用户信息
        next()
        try {
          // 获取用户信息成功
          await store.dispatch("userInfo")
        } catch (error) {
          // token失效
          // 派发actions退出登陆 重新跳转到/home
          await store.dispatch('getLoginOut')
          next('/login')
        }
      }
    } 
  } else {
    // 用户未登录暂时放行，  !=-1就是有
    // next()
    // 如果用户没有登陆 不能去往个人中心和支付订单的组件
    let toPath = to.path
    if(toPath.indexOf('pay') != -1 || toPath.indexOf('center') != -1 || toPath.indexOf('tarde') != -1) {
      // next('/login?redirect='to.path)
      next('/login?redirect='+toPath);
    }else {
      next()
    }
  }
})

export default router